﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;
using System.Data.Common;
using Biblioteca.Utils;
using SERIX.Util;
using Biblioteca.DataBase;
using Pms.Utils;

namespace SERIX
{
    /*
     * Autor      : IT-Developer1
     * Data       : 02/04/2010 11:03:48
     * Descricao  : 
     * Alteracoes : 
     * 
     */
    public class CriteriosPesquisaIndicadores : CriteriosPesquisa
    {
        public string IdtPrograma { get; set; }
        public string Programa { get; set; }
        public string IdtAcao { get; set; }
    }

    public partial class IndicadoresAcao : Seguranca
    {
        string _idt;
        CriteriosPesquisaIndicadores criteriosPesquisa;

        private void lovSelecaoPrograma(string chave, string descricao)
        {
            txtNomePrograma.Text = descricao;
            txtNomePrograma.Attributes.Add("chave", chave);

            SqlAcoesPrograma.SelectParameters["PARAM"].DefaultValue = chave;
            ddlAcoes.DataBind();
            ddlAcoes.Items.Insert(0, new ListItem());
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            base.OnLoad(e);
            btnNovo.Enabled = _permissaoManut.Equals(Constantes.PERM_MANUTENCAO);
            
            LovProgramas1.Selecao += new SERIX.Controles.lovGenerica.SelecaoDelegate(lovSelecaoPrograma);
            LovProgramas1.ConfigurarLov("Serix", "SRX_PROGRAMAS", "IDT_PROG", "NOM_PROG", "NOM_PROG", "Pesquisa de Programas", "Nome");

            if (!IsPostBack)
            {
                string opcao = Request["OP"];
                if (!String.IsNullOrEmpty(opcao) || opcao == "NP")
                    Session[Page.ToString() + "_PESQUISA"] = false;

                bool pesquisaInd = Convert.ToBoolean(Session[Page.ToString() + "_PESQUISA"]);
                if (String.IsNullOrEmpty(Request["idt"]) || pesquisaInd)
                {
                    Session[Page.ToString() + "_PESQUISA"] = true;
                    PainelDadosMestre.Visible = false;
                    UpdatePanelFiltro.Visible = true;
                }
                else
                {
                    Session[Page.ToString() + "_PESQUISA"] = false;
                    PainelDadosMestre.Visible = true;
                    UpdatePanelFiltro.Visible = false;
                }
            }

            SetaDadosMestre();
            InicializarCriteriosPesquisa();
            if (!RestaurarPesquisa() && !Page.IsPostBack)
            {
                SalvarPesquisa();
                Session["PagAtual"] = 1;
                Navegador1.CarregueBotoes(0);
                if (!string.IsNullOrEmpty(_idt))
                    Todos();
            }
            Navegador1.Pesquisar += new SERIX.Controles.Navegador.PesquisarDelegate(Pesquisar);
        }

        private void SetaDadosMestre()
        {
            string login = usuAut.Login;
            _idt = Convert.ToString(Session[Page.ToString() + "_IdtMestre"]);           
            if (!IsPostBack)
            {
                if (!String.IsNullOrEmpty(Request["idt"]))
                {
                    _idt = Server.UrlDecode(Criptografia.Descriptografar(Request["idt"]));
                    Session[Page.ToString() + "_IdtMestre"] = _idt;
                }
                CAcoesProgramas dao1 = CAcoesProgramas.PesquisaporCodigo(_idt, login);
                lblAcao.Text = dao1.Dsc_acao;
                //CProgramas dao2 = CProgramas.PesquisaporCodigo(dao1.Idt_prog, login);
                //lblPrograma.Text = dao2.Nom_prog;
            }
        }

        private void InicializarCriteriosPesquisa()
        {
            criteriosPesquisa = (CriteriosPesquisaIndicadores)Session[Page.ToString()];
        }

        private void SalvarPesquisa()
        {
            if (criteriosPesquisa == null)
            {
                criteriosPesquisa = new CriteriosPesquisaIndicadores() { FiltroSimples = "", PaginaAtual = 1 };
                Session[Page.ToString()] = criteriosPesquisa;
            }
            else
            {
                criteriosPesquisa.FiltroSimples = "";
                criteriosPesquisa.IdtPrograma = txtNomePrograma.Attributes["chave"].ToString();
                criteriosPesquisa.Programa = txtNomePrograma.Text;
                criteriosPesquisa.IdtAcao = ddlAcoes.SelectedValue;
                criteriosPesquisa.PaginaAtual = 1;
            }
        }

        private bool RestaurarPesquisa()
        {
            if (!IsPostBack && criteriosPesquisa != null)
            {
                //txtFiltrar.Text = criteriosPesquisa.FiltroSimples;
                txtNomePrograma.Attributes["chave"] = criteriosPesquisa.IdtPrograma;
                txtNomePrograma.Text = criteriosPesquisa.Programa;

                SqlAcoesPrograma.SelectParameters["PARAM"].DefaultValue = criteriosPesquisa.IdtPrograma;
                ddlAcoes.DataBind();
                ddlAcoes.SelectedValue = criteriosPesquisa.IdtAcao;

                if (!string.IsNullOrEmpty(_idt))
                    Todos();
                else
                    Pesquisar();
                return true;
            }
            return false;
        }

        protected void Todos()
        {
            //txtFiltrar.Text = "";
            string login = usuAut.Login;
            lblFiltro.Text = "Filtro: Indicadores de Ação";
            string SQL = @"SELECT IA.IDT_PROG, IA.IDT_IND, IA.IDT_ACAO, IA.ROT_IND, IA.DSC_IND, IA.IDT_CLA_IND, CI.DSC_CLA_IND, IA.TPO_VINC
                            FROM Serix.SRX_INDICADORES_ACOES IA 
                                 JOIN Serix.SRX_CLASSES_INDICADORES CI ON (IA.IDT_CLA_IND = CI.IDT_CLA_IND) 
                            WHERE IDT_ACAO = :IDT
                            ORDER BY DSC_IND";
            QueryPaginada qy = null;
            try
            {
                qy = new QueryPaginada(BiblioPMS.ObterConexao(BiblioPMS.aplicacaoSNG, login, BiblioPMS.Demo), SQL, BiblioSERIX.tamPag);
                qy.AdicionarParametro("IDT", DbType.String, _idt);
                gridView.DataSource = qy.Executar(criteriosPesquisa.PaginaAtual);
                gridView.DataBind();
                Navegador1.CarregueBotoes(qy.QtdLinhas());
            }
            catch
            {
                if (qy.EstadoConexao() == ConnectionState.Open)
                    qy.FecharConexao();
            }
            finally
            {
                if (qy.EstadoConexao() == ConnectionState.Open)
                    qy.FecharConexao();
            }
        }

        protected void Pesquisar()
        {
            QueryPaginada qy = null;
            try
            {
                //Se o filtro nao estiver vazio 
                if (ddlAcoes.SelectedValue != "")
                {
                    Session["PagAtual"] = 1;
                    string login = usuAut.Login;

                    lblFiltro.Text = "Filtro: Indicadores de Ação";
                    string SQL = @"SELECT IA.IDT_PROG, IA.IDT_IND, IA.IDT_ACAO, IA.ROT_IND, IA.DSC_IND, IA.IDT_CLA_IND, CI.DSC_CLA_IND, IA.TPO_VINC
                            FROM Serix.SRX_INDICADORES_ACOES IA 
                                 JOIN Serix.SRX_CLASSES_INDICADORES CI ON (IA.IDT_CLA_IND = CI.IDT_CLA_IND) 
                            WHERE IDT_ACAO = :IDT
                            ORDER BY DSC_IND";
                    try
                    {
                        qy = new QueryPaginada(BiblioPMS.ObterConexao(BiblioPMS.aplicacaoSNG, login, BiblioPMS.Demo), SQL, BiblioSERIX.tamPag);
                        qy.AdicionarParametro("IDT", DbType.String, ddlAcoes.SelectedValue);
                        gridView.DataSource = qy.Executar(criteriosPesquisa.PaginaAtual);
                        gridView.DataBind();
                        Navegador1.CarregueBotoes(qy.QtdLinhas());
                    }
                    catch
                    {
                        if (qy.EstadoConexao() == ConnectionState.Open)
                            qy.FecharConexao();
                        Todos();
                    }
                    finally
                    {
                        if (qy.EstadoConexao() == ConnectionState.Open)
                            qy.FecharConexao();
                    }
                }
                else
                    //Caso o filtro esteja vazio, mostre todos
                    Todos();
            }
            catch
            //Em caso de erro, mostre todos
            {
                if (qy.EstadoConexao() == ConnectionState.Open)
                    qy.FecharConexao();
                Todos();
            }
        }

        protected void btnNovo_Click(object sender, EventArgs e)
        {
            _idt = (string)Session[Page.ToString() + "_IdtMestre"];
            Response.Redirect("IndicadoresAcaoManut.aspx?OP=I&idtMestre=" + Server.UrlEncode(Criptografia.Criptografar(_idt)));
        }

        protected void btnPequisar_Click(object sender, EventArgs e)
        {
            SalvarPesquisa();
            Pesquisar();
            SetaDadosMestre();
        }

        protected void gridView_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                string IDT = ((DbDataRecord)e.Row.DataItem)["IDT_IND"].ToString();

                //Se tiver permissao de Manutenção
                ((HyperLink)e.Row.Cells[gridView.Columns.Count - 4].Controls[1]).NavigateUrl = "IndicadoresAcaoManut.aspx?OP=R&idt=" + Server.UrlEncode(Criptografia.Criptografar(IDT));
                ((HyperLink)e.Row.Cells[gridView.Columns.Count - 3].Controls[1]).NavigateUrl = "IndicadoresAcaoManut.aspx?OP=U&idt=" + Server.UrlEncode(Criptografia.Criptografar(IDT));
                ((HyperLink)e.Row.Cells[gridView.Columns.Count - 2].Controls[1]).NavigateUrl = "IndicadoresAcaoManut.aspx?OP=DATANASC_CONJUGE&idt=" + Server.UrlEncode(Criptografia.Criptografar(IDT));

                ((DropDownList)e.Row.Cells[gridView.Columns.Count - 1].Controls[1]).Attributes.Add("chave", Server.UrlEncode(Criptografia.Criptografar(IDT)));

                //SEGURANÇA
                ((HyperLink)e.Row.Cells[gridView.Columns.Count - 4].Controls[1]).Enabled = !_permissaoManut.Equals(Constantes.PERM_NEGADA);
                ((HyperLink)e.Row.Cells[gridView.Columns.Count - 3].Controls[1]).Enabled = _permissaoManut.Equals(Constantes.PERM_MANUTENCAO);
                ((HyperLink)e.Row.Cells[gridView.Columns.Count - 2].Controls[1]).Enabled = _permissaoManut.Equals(Constantes.PERM_MANUTENCAO);
            }
        }

        protected void ddlOpcoes_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (((DropDownList)sender).SelectedIndex == 1)
            {
                Response.Redirect("MedidasIndicadores.aspx?idt=" + ((DropDownList)sender).Attributes["chave"]);
            }
            else
            {
                Response.Redirect("VinculosDscOpcoes.aspx?idt=" + ((DropDownList)sender).Attributes["chave"]);
            }
        }

        protected void lblVinculo_PreRender(object sender, EventArgs e)
        {
            Label l = (Label)sender;
            switch (l.Text)
            {
                case "P": l.Text = "Produtor"; break;
                case "O": l.Text = "Organização"; break;
                default: l.Text = "Indefinida"; break;
            }
        }

        //TODO: verificar se ainda é necessário esse evento
        protected void ddlAcoes_PreRender(object sender, EventArgs e)
        {
            if (!IsPostBack &&
                !string.IsNullOrEmpty(ddlAcoes.SelectedValue) &&
                !string.IsNullOrEmpty(criteriosPesquisa.IdtAcao))
                ddlAcoes.SelectedValue = criteriosPesquisa.IdtAcao;
        }
    }
}